package pe.bf.extranet.web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import pe.bf.domain.bean.Empresa;
import pe.bf.domain.bean.Perfil;
import pe.bf.domain.bean.TipoDocumento;
import pe.bf.domain.bean.Usuario;
import pe.bf.extranet.cliente.ClienteWS;

 
public class UsuarioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UsuarioServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);

	}
	
	public void obtenerListaPerfiles(HttpServletRequest request){
		List<Perfil> perfiles=ClienteWS.findPerfiles();
		request.setAttribute("listaPerfiles",perfiles);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Usuario usuarioSession=(Usuario)request.getSession().getAttribute("usuarioBean");
		if(usuarioSession==null){
            request.getRequestDispatcher("servlet").forward(request, response); 
            return;
		}
		String p_accion=request.getParameter("accion");
		String p_tipodocumento=request.getParameter("txtTipoDocumento");
		String p_nrodocumento=request.getParameter("txtNroDocumento");
		String p_nombres=request.getParameter("txtNombres");
		String p_telefono=request.getParameter("txtTelefono");
		String p_email=request.getParameter("txtEmail");
		String p_clave=request.getParameter("txtClave");
		String p_anexo=request.getParameter("txtAnexo");
 
		if(p_accion!=null){
			 if(p_accion.equals("grabar_usuario")){
				 Usuario usuario=new Usuario();
				 TipoDocumento tipoDocumento=new TipoDocumento(Long.valueOf(p_tipodocumento));//obtener el tipo de documento por ID
				 usuario.setTipodocumento(tipoDocumento);
				 usuario.setNrodocumento(p_nrodocumento);
				 usuario.setNombres(p_nombres);
				 usuario.setTelefono(p_telefono);
				 usuario.setEmail(p_email);
				 usuario.setAnexo(p_anexo); 
				 if(request.getSession().getAttribute("empresaSession")!=null){
					 usuario.setEmpresa(new Empresa(Long.valueOf(request.getSession().getAttribute("empresaSession").toString())));
				 }else{
					 usuario.setEmpresa(usuarioSession.getEmpresa());
				 }
				 
				 
				 
				  String[] p_perfiles= request.getParameterValues("perfiles");
				  List<Perfil> lista_perfiles=new ArrayList();
				  System.out.println("longiu " + p_perfiles.length);
				  for(int i=0;i<p_perfiles.length;i++){
					  Perfil perfil=new Perfil();
					  System.out.println("perfil " + p_perfiles[i]);
					  perfil.setIdPerfil(Long.valueOf(p_perfiles[i]));
					  System.out.println(perfil.getIdPerfil());
					  lista_perfiles.add(perfil);//falta obtener perfil por id p_perfiles[i]
				  }
				  
				 usuario.setPerfils(lista_perfiles);
				 usuario.setClave(p_clave); 
				 if(grabarUsuario(usuario)){
					 request.setAttribute("mensaje", "Usuario creado exitosamente."); 
					 request.getSession().removeAttribute("empresaSession");
					 obtenerListaUsuario(request);
				 }else{
					 request.setAttribute("error", "Error al intentar crear el usuario.");
				 }
				 
			 }else if(p_accion.equals("baja")){
				 Usuario usuario=new Usuario();
				 String[] usuariosSeleccionados=request.getParameterValues("usuarioSeleccionado");
				 for(String id:usuariosSeleccionados){
					 		if(id.length()>0){
					 			Long idUsuario=Long.valueOf(id);
								 usuario.setIdUsuario(idUsuario);
								 bajaUsuario(usuario);	
					 		}
					 		 	 
				 }
				 
				 request.setAttribute("mensaje", "Usuario dado de baja exitosamente.");
			 }else if(p_accion.equals("grabar_empresa")){
				 
			 }else{
				 request.getSession().removeAttribute("empresaSession");
			 }
			
			obtenerListaUsuario(request);
			obtenerListaPerfiles(request);
			if(request.getAttribute("activeNroSobre")!=null){
				request.setAttribute("activeNroSobre", "true");
			}
			 request.getRequestDispatcher("usuarios.jsp").forward(request, response);
			 return;
		}else{
			obtenerListaUsuario(request);
			obtenerListaPerfiles(request);
			if(request.getAttribute("activeNroSobre")!=null){
				request.setAttribute("activeNroSobre", "true");
			}			
			 request.getRequestDispatcher("usuarios.jsp").forward(request, response);
			 return;
		}
	
		
	}
	
	public boolean bajaUsuario(Usuario usuario){ 
		return ClienteWS.bajaUsuario(usuario);
		
	}
	
	
	public boolean grabarUsuario(Usuario usuario){ 
		return ClienteWS.crearUsuario(usuario);
		
	}
	
	public void obtenerListaUsuario(HttpServletRequest request){ 
		Usuario  usuario=(Usuario)request.getSession().getAttribute("usuarioBean");
		List<Usuario> listaUsuarios= ClienteWS.listarUsuario(usuario.getEmpresa().getIdEmpresa()+"");
		System.out.println(listaUsuarios + " "  + usuario.getEmpresa().getIdEmpresa());
		request.setAttribute("listaUsuarios", listaUsuarios);
		
	}
	
 

}
